#pragma once
#ifndef CAMERA_CALIBRATION_H
#define CAMERA_CALIBRATION_H

#include <opencv2/opencv.hpp>
#include <vector>
#include <string>

class CameraCalibration {
public:
    // 构造函数，接收标定图像文件夹路径、棋盘格尺寸和方格实际大小
    CameraCalibration(const std::string& calibrationImagePath, const cv::Size& chessboardSize, float squareSize);
    // 析构函数
    ~CameraCalibration();

    // 执行相机标定操作
    bool performCalibration();
    // 获取相机内参矩阵
    cv::Mat getCameraMatrix() const;
    // 获取畸变系数矩阵
    cv::Mat getDistortionCoefficients() const;
    // 获取重投影误差
    double getReprojectionError() const;

private:
    // 标定图像文件夹路径
    std::string calibrationImagePath;
    // 棋盘格尺寸（内角点的行数和列数）
    cv::Size chessboardSize;
    // 方格实际大小（单位通常为毫米）
    float squareSize;
    // 相机内参矩阵
    cv::Mat cameraMatrix;
    // 畸变系数矩阵
    cv::Mat distortionCoefficients;
    // 重投影误差
    double reprojectionError;
};

#endif // CAMERA_CALIBRATION_H
